#!/usr/bin/env node

/**
 * 混淆和还原功能性能测试
 */

import { deobfuscate, obfuscate } from '../../src/hammer/crypto.mts';

console.log('=== 字符串混淆和还原性能测试 ===\n');

// 测试不同大小的数据集
const testSizes = [100, 1000, 10000, 100000];

testSizes.forEach((size) => {
  console.log(`测试数据大小: ${size} 个字符`);

  // 生成测试数据
  const testData = 'A'.repeat(size);

  // 测试混淆性能
  console.time(`混淆 ${size} 个字符`);
  const obfuscated = obfuscate(testData, 10);
  console.timeEnd(`混淆 ${size} 个字符`);

  // 测试还原性能
  console.time(`还原 ${size} 个字符`);
  const restored = deobfuscate(obfuscated);
  console.timeEnd(`还原 ${size} 个字符`);

  // 验证结果正确性
  console.log(`结果正确: ${testData === restored ? '是' : '否'}\n`);
});

// 测试不同步长的影响
console.log('=== 不同步长对性能的影响 ===\n');
const data = 'B'.repeat(10000);
const intervals = [5, 10, 50, 100];

intervals.forEach((interval) => {
  console.log(`步长: ${interval}`);

  console.time(`混淆 (步长=${interval})`);
  const obfuscated = obfuscate(data, interval);
  console.timeEnd(`混淆 (步长=${interval})`);

  console.time(`还原 (步长=${interval})`);
  const restored = deobfuscate(obfuscated);
  console.timeEnd(`还原 (步长=${interval})`);

  console.log(`结果正确: ${data === restored ? '是' : '否'}\n`);
});

console.log('=== 性能测试完成 ===');
